package cn.itcast.zt.leetcode.stack;

import java.util.Stack;

public class Stack_Algorithm {
    /**
     * 有效的括号  20
     * 给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。
     */
    public boolean isValid(String s) {
        if(s == null && s.equals("")) {
            return false ;
        }

        int length = s.length() ;
        if(length % 2 != 0) {
            return false ;
        }

        if(s.startsWith(")") || s.startsWith("]") || s.startsWith("}")) {
            return false ;
        }

        Stack<String> specialStrStack = new Stack<String>() ;
        String[] arrStr = s.split("") ;

        for(int i = 0 ; i < arrStr.length; i++) {
            String pushStr = arrStr[i] ;
            if(i == 0) {
                specialStrStack.push(pushStr) ;
            }else {
                if(!specialStrStack.empty()) {
                    String stackStr = specialStrStack.peek() ;

                    if(stackStr.equals("(") && pushStr.equals(")")) {
                        specialStrStack.pop() ;
                    }else if(stackStr.equals("[") && pushStr.equals("]")) {
                        specialStrStack.pop() ;
                    }else if(stackStr.equals("{") && pushStr.equals("}")) {
                        specialStrStack.pop() ;
                    }else {
                        specialStrStack.push(pushStr) ;
                    }
                }else {
                    specialStrStack.push(pushStr) ;
                }
            }
        }

        if(specialStrStack.empty()) {
            return true ;
        }

        return false ;
    }
}
